﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Demo.Services.Contracts.DTO.Filters;
using System.Data.SqlClient;
using Demo.CommonBase.Logging;
using Demo.CommonBase.Exceptions;
using System.Reflection;
using Demo.CommonBase.DTO.Filters;
using Demo.Services.Contracts.DTO.Infos;

namespace Demo.Services.Integration.DAO.IntegrationComponents.Helpers
{
    public class OperationDAOHelper
    {

        public static IList<IDbDataParameter> GetOperationsParam(OperationFilter filter)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Proyect", filter.Proyect);
                result.Add(parameter);

                parameter = new SqlParameter("@Resource", filter.Resource);
                result.Add(parameter);

                parameter = new SqlParameter("@DateStart", filter.DateStart);
                result.Add(parameter);

                parameter = new SqlParameter("@DateEnd", filter.DateEnd);
                result.Add(parameter);

                parameter = new SqlParameter("@Order", filter.Pagination.Sort);
                result.Add(parameter);

                parameter = new SqlParameter("@Direction", filter.Pagination.Direction);
                result.Add(parameter);

                parameter = new SqlParameter("@Start", filter.Pagination.PageNum);
                result.Add(parameter);

                parameter = new SqlParameter("@Limit", filter.Pagination.PageSize);
                result.Add(parameter);                
                
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        public static IList<IDbDataParameter> GetOperationResourceParam(ResourceFilter filter)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@Start", filter.Pagination.PageNum);
                result.Add(parameter);

                parameter = new SqlParameter("@Limit", filter.Pagination.PageSize);
                result.Add(parameter);

                parameter = new SqlParameter("@Id", filter.Id);
                result.Add(parameter);

            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }



        public static IList<IDbDataParameter> GetResourceLineTimeParam(int id)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@Id", id);
                result.Add(parameter);              

            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }


        public static IList<IDbDataParameter> SaveLineTimeParam(LineTimeInfo lineTime)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@ResourceId", lineTime.ResourceId);
                result.Add(parameter);
                parameter = new SqlParameter("@ProyectId", lineTime.ProyectId);
                result.Add(parameter);
                parameter = new SqlParameter("@FechaInico", lineTime.DateStart);
                result.Add(parameter);
                parameter = new SqlParameter("@FechaFin", lineTime.DateEnd);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        public static IList<IDbDataParameter> UpdateLineTimeParam(LineTimeInfo lineTime)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@id", lineTime.Id);
                result.Add(parameter);
                parameter = new SqlParameter("@ResourceId", lineTime.ResourceId);
                result.Add(parameter);
                parameter = new SqlParameter("@ProyectId", lineTime.ProyectId);
                result.Add(parameter);
                parameter = new SqlParameter("@FechaInico", lineTime.DateStart);
                result.Add(parameter);
                parameter = new SqlParameter("@FechaFin", lineTime.DateEnd);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        public static IList<IDbDataParameter> DeleteOperationLineTimeParam(int id)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@ProyectId", id);
                result.Add(parameter);

            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }



        public static IList<IDbDataParameter> DeleteLineTimeParam(int id)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@Id", id);
                result.Add(parameter);

            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        public static IList<IDbDataParameter> ValidationOvarlapDateParam(LineTimeInfo lineTimeInfo)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@RecursoId", lineTimeInfo.ResourceId);
                result.Add(parameter);
                parameter = new SqlParameter("@DateStart", lineTimeInfo.DateStart);
                result.Add(parameter);
                parameter = new SqlParameter("@DateEnd", lineTimeInfo.DateEnd);
                result.Add(parameter);

            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }


    }
}
